const Validate = (data)=>{
    return {
        // 必填项
        required:(rule, value, callback) => {
            if (value.length<1) {
                callback(new Error("必填项！"));
            } else {
                callback();
            }
        },
        // 时间不能为空!
        requiredTime:(rule, value, callback) => {
            if (value.length<1) {
                callback(new Error("时间不能为空!"));
            } else {
                callback();
            }
        },
        // 域名不合法
        urlDomain:(rule, value, callback) => {
            let regexp = /^[^@-]+\.com(\.cn)?$/;
            if (value) {
                if (value.search(regexp) != -1) {
                    callback();
                } else {
                    callback(new Error('域名不合法'));
                }
            } else {
                callback();
            }
        },
        // 域名不合法
        commonDomain:(rule, value, callback) => {
            let regexp = /(^[A-Za-z0-9\u4e00-\u9fa5]+)((\-([A-Za-z0-9\u4e00-\u9fa5]+))?)(\.([A-Za-z0-9\u4e00-\u9fa5]+)((\-([A-Za-z0-9\u4e00-\u9fa5]+))?))+$/;
            if (value) {
                if (value.search(regexp) != -1) {
                    callback();
                } else {
                    callback(new Error('域名不合法'));
                }
            } else {
                callback();
            }
        },
        // wap域名不合法
        wapDomian:(rule, value, callback) => {
            let regexp = /^([A-Za-z0-9])+\.?([A-Za-z0-9])+$/;
            if (value) {
                if (value.search(regexp) != -1) {
                    callback();
                } else {
                    callback(new Error('wap域名不合法'));
                }
            } else {
                callback();
            }
        },
        // masId不合法
        masId:(rule, value, callback) => {
            let regexp = /^M.{2}AH.{9}$/;
            if (value) {
                if (value.search(regexp) != -1) {
                    callback();
                } else {
                    callback(new Error('masId不合法！'));
                }
            } else {
                callback();
            }
        },
        // MAS标准代码不合法
        masStandard:(rule, value, callback) => {
            let regexp = /^MAH\d{7}$/;
            if (value) {
                if (value.search(regexp) != -1) {
                    callback();
                } else {
                    callback(new Error('MAS标准代码不合法'));
                }
            } else {
                callback();
            }
        },
        // MAS标准代码不合法
        mas06Standard:(rule, value, callback) => {
            let regexp = /^M06AH\d{9}$/;
            if (value) {
                if (value.search(regexp) != -1) {
                    callback();
                } else {
                    callback(new Error('MAS标准代码不合法'));
                }
            } else {
                callback();
            }
        },
        // 带宽不合法
        lineSpeed:(rule, value, callback) => {
            let regexp = /^[2468]$|^[1-9][02468]$|^1[0-4][02468]|^15[024]$/;
            if (value) {
                if (value.search(regexp) != -1) {
                    callback();
                } else {
                    callback(new Error('带宽不合法'));
                }
            } else {
                callback();
            }
        }, 
        // 比例输入不合法
        scale:(rule, value, callback) => {
            var objArr=value.split(":");
            let regexp = /^[2468]$|^[1-9][02468]$|^1[0-4][02468]|^15[024]$/;
            if(value){
                if (objArr.length == 2&&parseInt(objArr[0])+parseInt(objArr[1])==100) {
                    if (value.search(regexp) != -1) {
                        callback();
                    } else {
                        callback(new Error('带宽不合法'));
                    }
                } else {
                    callback();
                }
            }else{
                callback();
            }
        }, 
        // 时间格式
        HHmm:(rule, value, callback) => {
            let regexp = /^([0-1][0-9]|[2][0-3])[0-5][0-9]$/;
            if (value) {
                if (value.search(regexp) != -1) {
                    callback();
                } else {
                    callback(new Error('时间格式为HHmm'));
                }
            } else {
                callback();
            }
        },
        HHmm:(rule, value, callback) => {
            let regexp = /^([0-1][0-9]|[2][0-3])[0-5][0-9]$/;
            if (value) {
                if (value.search(regexp) != -1) {
                    callback();
                } else {
                    callback(new Error('时间格式为HHmm'));
                }
            } else {
                callback();
            }
        },
        // 日期格式
        dateFormat:(rule, value, callback) => {
            let regexp = /^\d{2}\/\d{2}\/\d{2,4}$/;
            if (value) {
                if (value.search(regexp) != -1) {
                    callback();
                } else {
                    callback(new Error('日期格式MM/DD/YYYY'));
                }
            } else {
                callback();
            }
        },
        // 网址不合法
        url:(rule, value, callback) => {
            let regexp = /^(http|https|ftp):\/\/([a-z0-9-]+\.)+[a-z0-9]{2,4}.*$/;
            if (value) {
                if (value.search(regexp) != -1) {
                    callback();
                } else {
                    callback(new Error('网址不合法'));
                }
            } else {
                callback();
            }
        },
        // 必须为大写英文字母
        upLetter:(rule, value, callback) => {
            let regexp = /^[A-Z]+$/;
            if (value) {
                if (value.search(regexp) != -1) {
                    callback();
                } else {
                    callback(new Error('必须为大写英文字母'));
                }
            } else {
                callback();
            }
        },
        //邮箱校验
        email:(rule, value, callback) => {
            // let regexp = /^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/;
            let regexp = /^[a-z0-9]+([._\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/;
            if (value) {
                if (value.search(regexp) != -1) {
                    callback();
                } else {
                    callback(new Error('请输入正确格式的邮箱'));
                }
            } else {
                callback();
            }
        },
        //手机号校验
        mobile:(rule, value, callback) => {
            let regexp = /^1[3-9]\d{9}$/;
            if (value) {
            if (value.search(regexp) != -1) {
                callback();
            } else {
                callback(new Error('请输入正确的手机号'));
            }
            } else {
            callback();
            }
        },
        //密码校验
        passWord: (rule, value, callback,aa) => {
            // let reg = /^([a-z-A-Z-0-9\.\@\!\#\$\%\^\&\,\?\*\(\)]){8,20}$/;
            let reg = /^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$).{8,20}$/;
            if (value) {
            if (value.match(reg)) {
                callback();
            } else {
                callback(new Error('密码必须为8-20位数字、字母及特殊字符中的2种或2种以上的组合'));
            }
            } else {
            callback();
            }
        },
        //密码确认校验
        validatePassCheck:(rule, value, callback) =>{
            if (value === '') {
            callback(new Error('确认密码不能为空！'));
            } else if(value !== data.formValue.newPassword){
            callback(new Error('确认密码与新密码不相同！'));
            } else {
            callback();
            }
        },
        //座机校验
        tel: (rule, value, callback) => {
            let reg = /^((0\d{2,3}-\d{7,8}|(0\d{2,3}-\d{7,8}-\d{3,5}))|[0-9]{8})$/;
            if (value) {
                if (value.match(reg)) {
                    callback();
                } else {
                    callback(new Error('请输入正确的电话号'));
                }
            } else {
                callback();
            }
        },
        // 手机号和座机号
        checkPhone: (rule, value, callback) => {
              let regEn = /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/
              if (!regEn.test(value)) {
                callback(new Error('请输入正确号码'))
              } else {
                callback()
              }
        },
        // 车牌号校验-包含新能源
        checkPlateNum:(rule, value, callback) => {
          if (value && value !== '') {
            let regEn = /(^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$)/
            if (!regEn.test(value)) {
              callback(new Error('请输入正确车牌号'))
            } else {
              callback()
            }
          } else {
               callback()
          }
        },
        // 身份证校验（比较详细）
        checkIdCard:(rule, value, callback) => {
          let regEn = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
          if (!regEn.test(value)) {
            callback(new Error('请输入正确身份证'))
          } else {
            // 校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10
            // 下面分别分析出生日期和校验位
            let num = value.toUpperCase()
            let len, re
            len = num.length
            if (len === 15) {
              re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/)
              let arrSplit = num.match(re) // 检查生日日期是否正确
              let dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4])
              let bGoodDay
              bGoodDay = (dtmBirth.getYear() === Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) === Number(arrSplit[3])) && (dtmBirth.getDate() === Number(arrSplit[4]))
              if (!bGoodDay) {
                callback(new Error('请输入正确身份证'))
              } else { // 将15位身份证转成18位 //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10
                let arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
                let arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
                var nTemp = 0, i
                num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6)
                for (i = 0; i < 17; i++) {
                  nTemp += num.substr(i, 1) * arrInt[i]
                }
                num += arrCh[nTemp % 11]
                callback()
              }
            }
            if (len === 18) {
              re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/)
              let arrSplit = num.match(re) // 检查生日日期是否正确
              let dtmBirth = new Date(arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4])
              let bGoodDay
              bGoodDay = (dtmBirth.getFullYear() === Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) === Number(arrSplit[3])) && (dtmBirth.getDate() === Number(arrSplit[4]))
              if (!bGoodDay) {
                callback(new Error('请输入正确身份证'))
              } else { // 检验18位身份证的校验码是否正确。 //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10
                let valnum
                let arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
                let arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
                var nTemp = 0, i
                for (i = 0; i < 17; i++) {
                  nTemp += num.substr(i, 1) * arrInt[i]
                }
                valnum = arrCh[nTemp % 11]
                
                if (valnum !== num.substr(17, 1)) {
                  callback(new Error('请输入正确身份证'))
                } else {
                    callback()
                }
              }
            }
          }
        },
        // 正整数（常用于年龄数量类的校验）
        checkNumber: (rule, value, callback) => {
          let regEn = /^[1-9]\d*$/
          if (!regEn.test(value)) {
            callback(new Error('正整数'))
          } else {
            callback()
          }
        },
        // 数字校验
        checkNumber:(rule, value, callback) => {
              if (value && value !== ''){
                let regEn = /^(\-|\+)?\d+(\.\d)?$/
                if (!regEn.test(value)) {
                  callback(new Error('请输入数字'))
                } else {
                  callback()
                }
              } else {
                callback()
              }
        }     
    }
}
export default Validate;
  